builderscon tokyo 2019
ソースコードを堪能せよ
コンパイルエラーにならないバグ
コンパイル以外でバグを見つける
バグは早期発見したい
動的解析
goroutineの可視化
例
Gopherを探せ
grepすればわかる
Gopher関数を探せ
コンパイルは通るけどバグになるもの
go vet でいくらか検出
Goにおける静的解析のフェーズ
SSAになるのか〜
字句解析
構文解析
わかること
型アサーションによるpanicの発生
左辺で二値を受ければpanicは起こらない
importの重複
わからないこと
型情報
定数式の結果
型チェック
わかること
型情報
識別子の解決
どこで使われているのか
どこで定義されているのか
コンテキストを構造体に保持しているものを見つける
context.Context interfaceを実装していることを確かめなければならない
静的単一代入 (SSA) 形式
基本ブロック
わかること
CFG
単一の代入であること
エラー処理のミス
Spannerのセッションリーク
ファイルを開いてcloseしないみたいな
ポインタ解析
わかること
ポインタと変数との対応
インタフェースを介したメソッド呼び出し
静的解析の応用
バナーの配信システム
技術課題のチェック
機械的にチェックできるものをチェック
最終的には人間が見る